vulkan: Improve rounded rect clipping
authorBenjamin Otte <otte@redhat.com>
Sat, 6 Mar 2021 19:44:38 +0000 (20:44 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 Mar 2021 16:43:28 +0000 (17:43 +0100)
Handle the case where the inner rounded rect is fully contained
within the outer rounded rect.

gsk/vulkan/gskvulkanclip.c

index d7e05821241015c17bfde351fc502685d19c70ba..fa8d561c00eab06c4683460d9c7f11607db059e8 100644 (file)
@@ -126,7 +126,13 @@ gsk_vulkan_clip_intersect_rounded_rect (GskVulkanClip        *dest,
 
     case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
-      /* XXX: improve */
+      if (gsk_rounded_rect_contains_rect (&src->rect, &rounded->bounds))
+        {
+          dest->type = gsk_rounded_rect_is_circular (rounded) ? GSK_VULKAN_CLIP_ROUNDED_CIRCULAR : GSK_VULKAN_CLIP_ROUNDED;
+          gsk_rounded_rect_init_copy (&dest->rect, rounded);
+          return TRUE;
+        }
+      /* XXX: Can be improved for the case where one of the rects is a slighty shrunk version of the other */
       return FALSE;
 
     default: